package collection;

import java.util.*;

/**
 * map 集合
 * Map（映射）集合表示一种非常复杂的集合，允许按照某个键来访问元素。Map 集合是由两个集合构成的，
 * 一个是键（key）集合，一个是值（value）集合。键集合是 Set 类型，
 * 因此不能有重复的元素。而值集合是 Collection 类型，可以有重复的元素。Map 集合中的键和值是成对出现的
 *
 * @author cctv
 */
public class MapTest {
    public static void main(String[] args) {

        Map map = new HashMap(10);
        map.put(102, "张三");
        map.put(105, "李四");
        map.put(109, "王五");
        map.put(110, "董六");
        //"李四"值重复
        map.put(111, "李四");
        //109键已经存在，替换原来值"王五"
        map.put(109, "刘备");
        // 打印集合元素个数
        System.out.println("集合size = " + map.size());
        // 打印集合
        System.out.println(map);
        // 通过键取值
        System.out.println("109 - " + map.get(109));
        System.out.println("108 - " + map.get(108));
        // 删除键值对
        map.remove(109);
        // 判断键集合中是否包含109
        System.out.println("键集合中是否包含109：" + map.containsKey(109));
        // 判断值集合中是否包含 "李四"
        System.out.println("值集合中是否包含：" + map.containsValue("李四"));
        // 判断集合是否为空
        System.out.println("集合是空的：" + map.isEmpty());
        // 1.使用for-each循环遍历
        System.out.println("--1.使用for-each循环遍历--");
        // 获得键集合
        Set keys = map.keySet();
        for (Object key : keys) {
            // 自动拆箱
            int ikey = (Integer) key;
            // 自动装箱
            String value = (String) map.get(ikey);
            System.out.printf("key=%d - value=%s \n", ikey, value);
        }
        // 2.使用迭代器遍历
        System.out.println("--2.使用迭代器遍历--");
        // 获得值集合
        Collection values = map.values();
        // 遍历值集合
        Iterator it = values.iterator();
        while (it.hasNext()) {
            Object item = it.next();
            String s = (String) item;
            System.out.println("值集合元素: " + s);
        }

        // 清空集合
        map.clear();
        System.out.println(map);

        public static Boolean valueOf(boolean b){
            return b ? Boolean.TRUE : Boolean.FALSE;
        }

    }
}
